$(function () {
    csrf();

    $("*[data-toggle='tooltip']").tooltip();
    $("*[data-toggle='popover']").popover();
});

var csrf = function () {
    var token = $("meta[name='_csrf']").attr("content");
    var header = $("meta[name='_csrf_header']").attr("content");
    if (token == null || header == null) {
        console.error("获取token失败");
    }
    else {
        $(document).ajaxSend(function (e, xhr, options) {
            xhr.setRequestHeader(header, token);
        });
    }
};

var checkLogin = function (arg) {
    var isLogin = false;
    var url = "/IsLogin.html";
    var data = "url=" + arg;
    var sfn = function (xhr) {
        if (xhr == "success" || xhr.indexOf("var token='isLogin'") != -1) {
            isLogin = true;
        }
    };

    $.ajax(url, {
        data: data,
        async: false,
        success: sfn
    });

    return isLogin;
};

/**
 * 封装ajax
 * @param options
 * options.rs 请求状态，1.空闲；2.忙碌
 */

var iAjax = function (options) {
    if (options.rs != null && options.rs.status != null) {
        if (options.rs.status == 2) {
            return;
        }
    }
    $.ajax({
        url: options.url,
        data: options.data,
        dataType: options.dataType == null ? 'json' : options.dataType,
        type: options.type == null ? 'get' : options.type,
        timeout: 30000,
        //发送请求前可修改 XMLHttpRequest 对象的函数，如添加自定义 HTTP 头。
        beforeSend: function (xhr) {
            if (options.rs != null && options.rs.status != null) {
                options.rs.status = 2;
            }

            if (options.beforeSend != null) {
                options.beforeSend(xhr);
            }
        },
        //由服务器返回，并根据 dataType 参数进行处理后的数据；描述状态的字符串。
        success: function (data) {
            if (options.success != null) {
                options.success(data);
            }
        },
        //XMLHttpRequest 对象、错误信息、（可选）捕获的异常对象。
        error: function (xhr, error, ex) {
            console.error("date:" + new Date().format("yyyy-M-d h:m:s.S"));
            console.error("url:" + options.url);
            console.error("data:" + options.data);
            console.error("xhr:" + xhr);
            console.error("error:" + error);
            console.error("ex:" + ex);
            console.error("==========================");

            if (options.error != null) {
                options.error(xhr, error, ex);
            }
        },
        //XMLHttpRequest 对象和一个描述请求类型的字符串
        complete: function (xhr, ts) {
            if (options.rs != null && options.rs.status != null) {
                options.rs.status = 1;
            }

            if (options.complete != null) {
                options.complete(xhr, ts);
            }
        }
    })
}

/*常用js代码**************************************************************************************************************/
/**
 * 格式化字符串
 * @returns {*}
 */
String.format = function () {
    if (arguments.length == 0)
        return null;
    var str = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
        str = str.replace(re, arguments[i]);
    }
    return str;
};

/**
 * 获取今天是星期几
 * @returns {*}
 */
Date.prototype.week = function () {
    var week;
    if (new Date().getDay() == 0) week = "星期日"
    if (new Date().getDay() == 1) week = "星期一"
    if (new Date().getDay() == 2) week = "星期二"
    if (new Date().getDay() == 3) week = "星期三"
    if (new Date().getDay() == 4) week = "星期四"
    if (new Date().getDay() == 5) week = "星期五"
    if (new Date().getDay() == 6) week = "星期六"
    return week;
}

/**
 * 对Date的扩展，将 Date 转化为指定格式的String
 * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
 * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 * 例子：
 * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
 * (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
 * @param fmt
 * @returns {*}
 */
Date.prototype.format = function (fmt) { //author: meizz
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

/**
 * 转换字符串为日期 yyyy-mm-dd
 * @param value
 * @returns {Date}
 */
Date.parse = function (value) {
    var regEx = new RegExp("\\-", "gi");
    var newRegEx = value.replace(regEx, "/");

    return new Date(newRegEx);
}

/**
 * 转换数组为json
 * @param o
 * @returns {*}
 */
var arrayToJson = function (o) {
    var r = [];
    if (typeof o == "string") return "\"" + o.replace(/([\'\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\t") + "\"";
    if (typeof o == "object") {
        if (!o.sort) {
            for (var i in o)
                r.push(i + ":" + arrayToJson(o[i]));
            if (!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)) {
                r.push("toString:" + o.toString.toString());
            }
            r = "{" + r.join() + "}";
        } else {
            for (var i = 0; i < o.length; i++) {
                r.push(arrayToJson(o[i]));
            }
            r = "[" + r.join() + "]";
        }
        return r;
    }
    return o.toString();
};


